package mSecretaria;

import groovy.sql.Sql;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import play.*;
import play.data.binding.As;
import play.db.DB;
import play.db.jpa.Model;
import myUtils.*;

public class MTipoCerimonia extends Model implements IModelo {
	
	
	private int codTipoCerimonia;
	private String descricao;
	private String sigla;
	

	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getSigla() {
		return this.sigla;
	}

	public void setSigla(String sigla) {
		this.sigla = sigla;
	}

	public int getCodTipoCerimonia() {
		return this.codTipoCerimonia;
	}
	
	
	public MTipoCerimonia(int aCodTipoCerimonia) throws Exception
	{
		ResultSet rs;
		String strQuery = "Select * From TipoCerimonia Where TipoCerimonia.CodTipoCerimonia = " + aCodTipoCerimonia;
		
		try
		{
			rs = DB.executeQuery(strQuery);
			
			
			if(rs == null)
				throw new Exception("TipoCerimonia não cadastrado!");
			
			while (rs.next())
			{
				this.codTipoCerimonia	= aCodTipoCerimonia;
				this.sigla	     = rs.getString("Sigla");
				this.descricao   = rs.getString("Descricao");
			}
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage());
		}
			
	}
	
	
	public MTipoCerimonia(String aDescricao,String aSigla)
	{
		this.codTipoCerimonia = 0;
		this.sigla    		   = aSigla;
		this.descricao     	   = aDescricao;
	}
	
	private MTipoCerimonia(int aCodTipoCerimonia,String aDescricao,String aSigla)
	{
		this.codTipoCerimonia 	= aCodTipoCerimonia;
		this.sigla		 	  	= aSigla;
		this.descricao	 	  	= aDescricao;
	}
	

	@Override
	public void update() throws Exception {
		
		if(this.codTipoCerimonia == 0)
		{
			this.insert();
		}
		else
		{
		
			String strQuery = "Update TipoCerimonia set Descricao = '" + this.descricao;
			strQuery += "', Sigla = '" + this.sigla + "'";
			strQuery += " where TipoCerimonia.CodTipoCerimonia = " + this.codTipoCerimonia;
					
			try
			{
				DB.execute(strQuery);			
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
			}
		}

	}

	@Override
	public void excluir() throws Exception {
		
		if(this.codTipoCerimonia != 0)
		{
		
			String strQuery = "Delete From TipoCerimonia Where TipoCerimonia.CodTipoCerimonia = " + this.codTipoCerimonia;
			
			try
			{
				DB.execute(strQuery);	
				this.codTipoCerimonia = 0;
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
			}
			
		}

	}

	@Override
	public void insert() throws Exception {
		
		ResultSet rs;
		String strQuery2 = "Select CodTipoCerimonia from TipoCerimonia Where ";
		strQuery2 += "Descricao = '" + this.descricao + "'";
		strQuery2 += " and Sigla = '" + this.sigla + "'";
		
		String strQuery = "Insert Into TipoCerimonia (sigla,descricao) Values (";
		strQuery += "'" + this.sigla;
		strQuery += "','" + this.descricao + "')";
		
		try
		{
			DB.execute(strQuery);
			rs = DB.executeQuery(strQuery2);
			
			while(rs.next())
			{
				this.codTipoCerimonia = rs.getInt("CodTipoCerimonia");
			}
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery + " | " + strQuery2);
		}

	}
	
	public static List<MTipoCerimonia> select(int aCodTipoCerimonia, String aSigla,String aDescricao) throws Exception
	{
		ResultSet rs;
		String sigla,descricao;
		int codTipoCerimonia;
		List<MTipoCerimonia> retorno  = new ArrayList<MTipoCerimonia>();
		String strQuery = "Select * From TipoCerimonia Where TipoCerimonia.CodTipoCerimonia > 0" ;
		
		if(aCodTipoCerimonia > 0 )
		{
			strQuery += " and TipoCerimonia.CodTipoCerimonia = " + aCodTipoCerimonia;
		}
		

		strQuery += " and TipoCerimonia.sigla Like '" + aSigla + "%'";

		strQuery += " and TipoCerimonia.Descricao Like '" + aDescricao + "%'";
		
		try
		{
			rs = DB.executeQuery(strQuery);
			
			while(rs.next())
			{
				codTipoCerimonia = rs.getInt("CodTipoCerimonia");
				descricao		 = rs.getString("Descricao");
				sigla			 = rs.getString("Sigla");
				
				MTipoCerimonia tipoCerimonia = new MTipoCerimonia(codTipoCerimonia,descricao,sigla);
				
				retorno.add(tipoCerimonia);
				
			}
		}
		catch(Exception e)
		{
			throw new Exception(e.getCause() + "\n Comando: " + strQuery);
		}
		
		
		return retorno;
	}

}
